package com.start.form.engine.core.storage;


import com.alibaba.fastjson2.JSONObject;
import com.start.common.std.StartSingletonFactory;
import com.start.form.engine.core.entity.StartFormConfig;

public interface StartAvueDynamicStore {
    public static StartAvueDynamicStore getInstance() {
        return StartSingletonFactory.get(StartAvueDynamicStoreImpl.class);
    }

    /**
     * 保存子表数据
     *
     * @param mainTableConfig 主表配置
     * @param mainDataId      主表数据id
     * @param data            全部数据（主表单数据+加子表数据）
     */
    void save(StartFormConfig mainTableConfig, String mainDataId, JSONObject data);

    /**
     * 删除数据
     *
     * @param mainTableConfig 主表配置
     * @param mainDataId      主表数据id
     */
    void remove(StartFormConfig mainTableConfig, String mainDataId);

    /**
     * 修改数据
     *
     * @param mainTableConfig 主表配置
     * @param mainDataId      主表数据id
     * @param data            全部数据（主表单数据+加子表数据）
     */
    void update(StartFormConfig mainTableConfig, String mainDataId, JSONObject data);

    /**
     * 查询数据
     *
     * @param mainTableConfig 主表配置
     * @param mainData        主表数据
     * @return
     */
    void handlerDynamicSelect(StartFormConfig mainTableConfig, JSONObject mainData);



    /**
     * 同步子表单
     */
    void syncDynamicTable(StartFormConfig mainTableConfig);

    /**
     * 子表单处理接口
     */
    interface handlerDynamicTable {
        /**
         * 处理子表单
         *
         * @param dynamicTableConfig 子表单配置
         * @param dynamic
         * @param prop               子表单字段名
         */
        void handler(StartFormConfig dynamicTableConfig, JSONObject dynamic, String prop);
    }

}
